package com.nuoniu.sibanyun.service.erp;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.dto.ErpPeriodDto;
import com.nuoniu.sibanyun.entity.dto.ErpPeriodSaveDto;
import com.nuoniu.sibanyun.entity.erp.ErpPeriod;
import com.nuoniu.sibanyun.entity.vo.ErpPeriodVo;

import java.time.LocalDate;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author baiqiang
 * @since 2020-09-22
 */
public interface IErpPeriodService extends IService<ErpPeriod> {
    /**
     * 获取当前 租户的 会计期间
     * @return
     */
    List<ErpPeriod> listCurrentCompanyErpPeriod();

    /**
     * 获取 某年的  会计期间
     * @return
     */
    List<ErpPeriod> listCurrentErpPeriodByYear(Integer year);

    /**
     * 保存 会计期间
     * @param erpPeriodSaveDto
     */
    void saveErpPeriods(ErpPeriodSaveDto erpPeriodSaveDto);

    /**
     * 获取当前 租户的 会计期间（前端使用）
     * @return
     */
    List<ErpPeriodVo> listErpPeriodVo();

    /**
     * 删除 最后一年的 会计期间
     * @param year
     */
    void deleteLastYear(Integer year);


    /**
     * 根据具体日期获取期间
     * @author 小啊刚
     * @date 2021-04-26
     */
    ErpPeriod getByDate(LocalDate businessDate, Integer companyId, Integer accountId);

    /**
     * 期末结账
     * @author 小啊刚
     * @date 2021-04-29
     */
    void settleAccounts(Integer year, Integer month, Integer status);

    void BusinessSettleAccounts(String begin, String end, Integer status);

    /**
     * 根据期间获取
     * @author 小啊刚
     * @date 2021-04-30
     */
    ErpPeriod getByPeriod(Integer accountYear, Integer accountPeriod);

    /**
     * 根据时间 获取期间
     * @param now
     * @return
     */
    ErpPeriod getByDate(LocalDate now);

    /**
     * 校验 期间状态，并返回期间信息
     * @param now
     * @param checkType
     * @return
     */
    ErpPeriod checkErpPeriodByDate(LocalDate now,String checkType);

    /**
     * 存货结账
     * @author 小啊刚
     * @date 2021-07-15
     */
    void inventorySettleAccounts(Integer year, Integer month, Integer status, Integer companyId);

    /**
     * 进销存
     * @author 小啊刚
     * @date 2021-07-17
     */
    void psiSettleAccounts(Integer year, Integer month, Integer status, Integer type);

    /**
     * 年度结帐
     * @author 小啊刚
     * @date 2022-05-31
     */
    void settleYearAccounts();
}
